<script type="text/javascript" src="./p.js"></script>
<script type="text/javascript">

const result = [false, false, false, false, false, false];

(function () {
  const arr = [];
  const p = new Promise((res, rej) => {
    setTimeout(() => {
      let pp = new Promise((res) => {
        setTimeout(() => {
          res(1);
        }, 200);
      });
      res(pp);
    }, 200);
  });

  p.then((v) => {
    arr.push(v);
  });

  setTimeout(() => {
    p.then((v) => {
      arr.push(v);
    });
  }, 500);

  setTimeout(() => {
    result[4] = (arr.join(',') === '1,1');
  }, 1000);
})();

setTimeout(() => {
  console.log(result);
}, 1500);

(function () {
  const ppap = new Promise((res, rej) => {
    setTimeout(() => {
      const p1 = new Promise((res) => {
        setTimeout(() => {
          res(123);
        }, 200);
      });
      const p2 = Promise.resolve(p1);
      const p3 = Promise.resolve(p2);
      res(p3);
    }, 200);
  });
  ppap.then((v) => {
    result[1] = (v === 123);
  });
})();

(function () {
  const arr = [];

  let ap = new Promise((res, rej) => {
    setTimeout(() => {
      res(1);
    }, 500);
  });
  ap = ap.then((v) => {
    arr.push(v);
    return ++v;
  }).then((v) => {
    arr.push(v);
    return ++v;
  });

  ap.then((v) => {
    arr.push(v);
    return ++v;
  }).then((v) => {
    arr.push(v);
    return ++v;
  });

  ap.then((v) => {
    arr.push(v);
    return ++v;
  }).then((v) => {
    arr.push(v);
    return ++v;
  });

  setTimeout(() => {
    result[2] = (arr.join(',') === '1,2,3,3,4,4');
  }, 1000);
})();

(function () {
  const arr = [];

  const p = new Promise((res, rej) => {
    setTimeout(() => {
      let pp = new Promise((res) => {
        setTimeout(() => {
          res(1);
        }, 200);
      });
      pp = pp.then((v) => {
        arr.push(v);
        throw new Error(++v);
      }).catch((err) => {
        arr.push(err.message);
        return 3;
      });
      pp = pp.then((v) => {
        arr.push(v);
        return ++v;
      });
      res(pp);
    }, 200);
  });

  p.then((v) => {
    arr.push('0-' + v);
  });

  p.then((v) => {
    arr.push('1-' + v);
  });
  p.then((v) => {
    arr.push('21-' + v);
    return v;
  }).then((v) => {
    arr.push('22-' + v);
    return v;
  }).then((v) => {
    arr.push('23-' + v);
  });

  setTimeout(() => {
    result[3] = (arr.join(',') === '1,2,3,0-4,1-4,21-4,22-4,23-4');
  }, 1000);
})();

(function () {
  const arr = [];
  const toReject = Promise.resolve(1);
  toReject
    .then((x) => {
      arr.push(x);
      return ++x;
    })
    .then((x) => {
      arr.push(x);
      return ++x;
    })
    .then((x) => {
      throw new Error(`err${x}`);
    })
    .then((x) => {
      arr.push(x);
      return ++x;
    })
    .then((x) => {
      arr.push(x);
      return ++x;
    })
    .catch((err) => {
      arr.push(err.message);
    });

    setTimeout(() => {
      result[0] = (arr.join(',') === '1,2,err3');
    }, 1000);
})();

(function () {
  Promise.all([
    new Promise((res) => {
      setTimeout(() => {
        res(1);
      }, 500);
    }),
    new Promise((res) => {
      res(2);
    }),
    new Promise((res) => {
      setTimeout(() => {
        res(3);
      }, 200);
    }),
  ]).then((arr) => {
    console.log('then', arr);
  });

  Promise.all([
    new Promise((res, rej) => {
      setTimeout(() => {
        rej(1);
      }, 500);
    }),
    new Promise((res) => {
      res(2);
    }),
    new Promise((res) => {
      setTimeout(() => {
        res(3);
      }, 200);
    }),
  ]).then((arr) => {
    console.log(arr);
  }).catch((e) => {
    console.log('catch', e);
  });
})();

(function () {
  const arr = [];
  const p1 = new Promise((res,) => {
    setTimeout(() => {
      res(1);
    }, 200);
  });
  const p2 = Promise.resolve(p1);
  const p3 = Promise.resolve(p2);
  p3.then((v) => {
    arr.push(1);
  });
  setTimeout(() => {
    p2.then((v) => {
      arr.push(1);
    });
  }, 500);
  setTimeout(() => {
    result[5] = (arr.join(',') === '1,1');
  }, 1000);
})();
</script>